import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QListWidget, QHBoxLayout, QVBoxLayout

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        # 设置主窗口布局
        main_layout = QHBoxLayout()

        # 创建按钮
        self.toggle_button = QPushButton('显示/隐藏列表', self)
        self.toggle_button.clicked.connect(self.toggle_list)

        # 创建左侧布局，并将按钮添加进去
        left_layout = QVBoxLayout()
        left_layout.addWidget(self.toggle_button)

        # 将左侧布局添加到主布局中
        main_layout.addLayout(left_layout)

        # 设置窗口的主布局
        self.setLayout(main_layout)
        
        # 创建列表窗口 -- 默认不可见
        self.list_widget = QListWidget()
        self.list_widget.setVisible(False)
        self.list_widget.hide()
        self.layout().addWidget(self.list_widget)  # 添加到当前布局

        # 设置窗口标题
        self.setWindowTitle('Toggle List Widget')
        # self.setGeometry(100,100,150,150)

    def toggle_list(self):
        if not self.list_widget.isVisible():
            # 如果列表窗口不可见，则并显示它
            self.list_widget.show()  # 显示列表窗口
            self.list_widget.setVisible(True)
        else:
            # 如果列表窗口存在且可见，则隐藏它
            self.list_widget.hide()
            self.list_widget.setVisible(False)
            # self.setGeometry(100,100,150,150)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())